﻿using System;
using System.Text.Json.Serialization;

namespace TowerCraneMonitorClient.NetClient.TimeSync
{
    /// <summary>
    /// 同步服务器时间数据
    /// </summary>
    public class Data
    {
        /// <summary>
        /// 客户端发送数据时间。Json（unix时间戳）
        /// </summary>
        [JsonPropertyName("t1")]
        public long TimeStamp1 => T1.ToUnixTimeStamp().ToLong();

        /// <summary>
        /// 客户端发送数据时间。常规时间
        /// </summary>
        [JsonIgnore]
        public DateTime T1 { get; set; }

        /// <summary>
        /// 服务器接收到数据的时间。Json（unix时间戳）
        /// </summary>
        [JsonPropertyName("t2")]
        public long TimeStamp2 { get; }

        /// <summary>
        /// 服务器接收到数据的时间。常规时间
        /// </summary>
        [JsonIgnore]
        public DateTime T2 => TimeStamp2.ToUnixTimeStamp().ToDateTime();

        /// <summary>
        /// 服务器返回给客户端的时间。Json（unix时间戳）
        /// </summary>
        [JsonPropertyName("t3")]
        public long TimeStamp3 { get; }

        /// <summary>
        /// 服务器返回给客户端的时间。常规时间
        /// </summary>
        [JsonIgnore]
        public DateTime T3 => TimeStamp3.ToUnixTimeStamp().ToDateTime();


        /// <summary>
        /// 客户端收到服务器的时间。Json（unix时间戳）
        /// </summary>
        [JsonPropertyName("t4")]
        public long TimeStamp4 { get; }

        /// <summary>
        /// 客户端收到服务器的时间。常规时间
        /// </summary>
        [JsonIgnore]
        public DateTime T4 { get; set; }


        /// <summary>
        /// 与服务器相比，客户端时间滞后值。
        /// </summary>
        [JsonIgnore]
        public TimeSpan DelayTime => ((T2 - T1) - (T3 - T4)) / 2;

        /// <summary>
        /// 修正的正确的时间。收到数据报后，应该立即获取该值。
        /// </summary>
        [JsonIgnore]
        public DateTime CorrectTime => T4 + DelayTime;
    }
}
